package com.aaa.system.controller.api;

import com.aaa.system.aop.annotation.Log;
import com.aaa.system.service.MenuService;
import com.aaa.entity.Menu;
import com.aaa.vo.Result;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 响应到前端的controller类
 */
@RestController
@RequestMapping("system/api/menu")
public class ApiMenuController {

    @Autowired
    private MenuService menuService;

    /**
     * 查询当前登录用户所拥有的菜单，放置在主页的左侧菜单栏
     * @return
     */
    @GetMapping("/leftMenu")
    public Result<List<Menu>> getInfo(){
        return menuService.getLeftMenu();
    }

    /**
     * 查询所有菜单信息
     * @return 所有菜单信息
     */
    @GetMapping("/list")
    public Result<List<Menu>> list(){
        return menuService.getTreeAll();
    }

    /**
     * 根据角色id查询当前角色所拥有的菜单
     * @param roleId 角色id
     * @return 当前角色的菜单信息
     */
    @GetMapping("/findByRoleId/{roleId}")
    public Result<List<Integer>> findByRoleId(@PathVariable Long roleId){
        return menuService.findByRoleId(roleId);
    }

    /**
     * 对给定的角色分配菜单
     * @param roleId 角色id
     * @param menuIds 菜单id数组
     * @return 操作结果信息
     */
    @Log(title = "确认分配权限",business_type = "2")
    @PostMapping("confirmMenu")
    public Result<List<Menu>> confirmMenu(Long roleId,Long[] menuIds){
        return menuService.confirmMenu(roleId,menuIds);
    }

    /**
     * 菜单管理页面查询所有菜单
     * @param menu
     * @return
     */
    @PostMapping("selectAll")
    public Result<List<Menu>> selectAll(@RequestBody Menu menu){
        return menuService.selectAll(menu);
    }

    /**
     * 添加或者修改菜单信息
     * @param menu 菜单对象
     * @return 操作结果信息
     */
    @Log(title = "添加/修改菜单",business_type = "1")
    @PostMapping("saveOrUpdateMenu")
    public Result<Boolean> saveOrUpdateMenu(@RequestBody Menu menu){
        return menuService.saveOrUpdateMenu(menu);
    }

    /**
     * 根据菜单id删除菜单
     * @param menuId 菜单id
     * @return 结果字符串
     */
    @Log(title = "删除菜单",business_type = "3")
    @DeleteMapping("deleteMenuByIds/{menuId}")
    public Result<Boolean> deleteMenuByIds(@PathVariable Long menuId){
        return menuService.deleteMenuByIds(menuId);
    }
}
